package com.wkw.sdemo.controller;

import com.wkw.sdemo.domain.Person;
import com.wkw.sdemo.domain.Result;
import com.wkw.sdemo.enums.ResultEnum;
import com.wkw.sdemo.repository.PersonRepository;
import com.wkw.sdemo.service.PersonService;
import com.wkw.sdemo.utils.ResultUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

@RestController
@RequestMapping(value = "/person")
public class PersonController {
    @Autowired
    private PersonRepository personRepository;
    @Autowired
    private PersonService personService;
    /**
     * 添加一个人
     * @param name 姓名
     * @param age 年龄
     * @return
     */
    @PostMapping(value = "/addPerson")
    public Person addPerson(@RequestParam("name")String name, @RequestParam("age")Integer age){
        Person person = new Person();
        person.setName(name);
        person.setAge(age);
        return personRepository.save(person);
        //FIXME 20170915 这个木有表单验证  如果报错要用自己封装好返回结果  用下边的方法
    }

    /**
     * 另一种方法添加人
     * @param person
     * @return
     */
    @PostMapping(value = "/addPerson2")
    public Result<Person> addPerson2(@Valid Person person, BindingResult bindingResult){
        if(bindingResult.hasErrors()){
            //return null;
            return ResultUtil.error(ResultEnum.FAILED.getCode(),bindingResult.getFieldError().getDefaultMessage());
        }
        return ResultUtil.success(personRepository.save(person));
    }

    /**
     * 获取人列表
     * @return person列表
     */
    @GetMapping(value = "/getPerson")
    public List<Person> getPerson(){
        return personRepository.findAll();
    }

    /**
     * 通过id查找人
     * @param id 人编号
     * @return
     */
    @GetMapping(value ="/getPersonById")
    public Person getPersonById(@RequestParam("id") Integer id){
        return personRepository.findOne(id);
    }

    /**
     * 通过name查找人
     * @param name 名字
     * @return
     */
    @GetMapping(value = "/getPersonByName")
    public List<Person> getPersonByName(@RequestParam("name")String name){
        return personRepository.findByName(name);
    }

    /**
     * 通过年龄查找人
     * @param age
     * @return
     */
    @GetMapping(value ="/getPersonByAge")
    public List<Person> getPersonByAge(@RequestParam("age")Integer age){
        return personRepository.findByAge(age);
    }

    /**
     * 捕获exception并封装成自己的result类型
     * 查看年纪   通过不同年纪返回不同的exception类型
     * @param id
     * @throws Exception
     */
    @GetMapping(value = "/getAge")
    public void getAge(@RequestParam("id")Integer id) throws Exception{
        personService.getAge(id);
    }
}
